import requests
import os
import argparse
import tempfile
import webbrowser
import time

def detect_video(video_path, api_url="http://localhost:5000/detect_video", sample_rate=10, max_frames=300):
    """
    调用API检测视频中的人脸真伪
    
    Args:
        video_path: 视频文件路径
        api_url: API端点URL
        sample_rate: 采样率（每隔多少帧处理一次）
        max_frames: 最大处理帧数
        
    Returns:
        API返回的结果
    """
    # 检查文件是否存在
    if not os.path.exists(video_path):
        print(f"错误: 视频文件不存在: {video_path}")
        return None
    
    # 准备请求
    files = {'file': (os.path.basename(video_path), open(video_path, 'rb'), 'video/mp4')}
    data = {
        'sample_rate': sample_rate,
        'max_frames': max_frames
    }
    
    try:
        print(f"正在上传视频文件 {video_path} 到服务器进行处理...")
        print(f"使用参数: sample_rate={sample_rate}, max_frames={max_frames}")
        
        # 发送请求
        start_time = time.time()
        response = requests.post(api_url, files=files, data=data)
        process_time = time.time() - start_time
        
        # 检查响应
        if response.status_code == 200:
            result = response.json()
            
            print("\n处理完成! 耗时: {:.2f}秒".format(process_time))
            print("\n视频检测结果:")
            print(f"总体结论: {result['overall_label']}")
            print(f"虚假帧比例: {result['fake_ratio'] * 100:.2f}%")
            print(f"处理帧数: {result['frames_processed']}/{result['frames_total']}")
            
            # 打开处理后的视频
            if 'video_url' in result:
                video_url = f"http://localhost:5000{result['video_url']}"
                print(f"\n处理后的视频可以在以下地址访问:")
                print(video_url)
                
                # 询问是否打开视频
                open_browser = input("\n是否在浏览器中打开视频? (y/n): ")
                if open_browser.lower() == 'y':
                    webbrowser.open(video_url)
            
            return result
        else:
            print(f"API请求失败: {response.status_code}")
            print(response.text)
            return None
    except Exception as e:
        print(f"请求异常: {str(e)}")
        return None
    finally:
        # 关闭文件
        files['file'][1].close()

if __name__ == "__main__":
    # 设置命令行参数
    parser = argparse.ArgumentParser(description="视频人脸真伪检测客户端示例")
    parser.add_argument("--video", type=str, required=True, help="要检测的视频文件路径")
    parser.add_argument("--url", type=str, default="http://localhost:5000/detect_video", help="API端点URL")
    parser.add_argument("--sample_rate", type=int, default=10, help="采样率（每隔多少帧处理一次）")
    parser.add_argument("--max_frames", type=int, default=300, help="最大处理帧数")
    
    args = parser.parse_args()
    
    # 调用API
    detect_video(args.video, args.url, args.sample_rate, args.max_frames) 